--------------------------------------------------------------------------------
-- File: P4_V2.adb
--------------------------------------------------------------------------------

WITH Text_IO;
WITH Matrices;
WITH List_Marquage_Accessible;
WITH Marquage_Accessible;

PROCEDURE Test_Marquage IS


  --Marquage_Accessible.NbPlace := 3;
  --Marquage_Accessible.NbTransition := 3;


  --Declaration des variables
  NbPlaces      : Integer := 3;
  NbTransitions : Integer := 3;
  NbCourant     : Integer := 0;

  M0       : Marquage_Accessible.Marquage;

  Imoins   : Matrices.Matrice (1 .. NbPlaces, 1 .. NbTransitions) ;
  Iplus    : Matrices.Matrice (1 .. NbPlaces, 1 .. NbTransitions);

  List_Accessible : List_Marquage_Accessible.ListMarquage ;

  NewMA : Marquage_Accessible.MarquageAccessible;

BEGIN

  --Initialisations des variables
  M0     := (1, 0, 0);
  Marquage_Accessible.Create (NewMA, M0);

  Imoins := ((1, 0, 0), (0, 1, 1), (0, 1, 0));
  Iplus  := ((0, 1, 1), (0, 0, 0), (1, 0, 0));


  --M0     := (1, 0);
  --Marquage_Accessible.Create (NewMA, M0);

  --Imoins := (1=>(1=>1),2=>(1=>1));
  --Iplus  := (1=>(1=>1),2=>(1=>0));



  Text_Io.Put_Line ("main - Les variables ont correctement ete initialisees.");

  --Construction du Graphe des Marquages Accessibles
  Text_Io.Put_Line ("I-");
  Matrices.Put (Imoins);
  Text_Io.Put_Line ("I+");
  Matrices.Put (Iplus);
  Text_Io.New_Line;
  Text_Io.Put_Line ("MARQUAGE INITIAL :");
  Marquage_Accessible.Put (NewMA, 0);

  --Initialisation de la liste
  List_Marquage_Accessible.Initialise (List_Accessible, NbCourant, NewMA);


  Text_Io.New_Line;
  Text_Io.Put_Line ("GRAPHE DES MARQUAGES ACCESSIBLES :");


  --------
  List_Marquage_Accessible.Construire (List_Accessible, NbCourant, Imoins, Iplus);


  FOR I IN 1 .. NbCourant LOOP
    Marquage_Accessible.Put (List_Accessible (I), I);
  END LOOP;
  Text_Io.New_Line;
  Text_Io.Put_Line ("main - Le fichier s'est execute correctement  :-)");




  --Borne
  IF (List_Marquage_Accessible.EstBorne (List_Accessible, NbCourant) = True)
  THEN
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP est borne");
  ELSE
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP n'est pas borne");
  END IF;

  --Quasi-vivacite
  IF (List_Marquage_Accessible.EstVivant (List_Accessible, NbCourant, NbTransitions) = True)
  THEN
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP est quasi-vivant");
  ELSE
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP n'est pas quasi-vivant");
  END IF;

  --Vivacite
  IF (List_Marquage_Accessible.EstQuasiVivant (List_Accessible, NbCourant, NbTransitions) = True)
  THEN
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP est vivant");
  ELSE
    Text_Io.New_Line;
    Text_Io.Put_Line ("Le RdP n'est pas vivant");
  END IF;


END Test_Marquage ;
